/**
 * 生产魔方元色块
 * @param {Array} arr 颜色数组
 * @param {Number} size 数量
 * @returns {Array} 魔方元色块数组
 */
export function generateMate(arr, size) {
  let result = []

  function getRandomElement(arr) {
    // 从数组arr中随机返回一个元素
    const randomIndex = Math.floor(Math.random() * arr.length)
    return arr[randomIndex]
  }
  for (let i = 0; i < size; i++) {
    // 循环size次，每次从arr数组中随机获取一个元素，并添加到result数组中
    result.push(getRandomElement(arr))
  }
  return result
}

/**
 * 返回一个从0到max-1之间的随机整数
 * @param {Number} max 最大值
 * @returns {Number} 随机整数
 */
export function generateRandomNumber(max) {
  return Math.floor(Math.random() * max);
}

/**
 * 颜色数组中随机获取一个颜色，但排除掉except指定的颜色
 * @param {Array} colors 颜色数组
 * @param {String} except 要排除的颜色
 */
export function getRandomColorExcept(colors, except) {
  let availableColors = colors.filter((color) => color !== except)
  let randomIndex = Math.floor(Math.random() * availableColors.length)
  return availableColors[randomIndex]
}

/**
 * 睡眠 延时
 * @param {Object} ms 需要延时的毫秒数
 */
export function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}